package pl.uz.zgora.plan;

import java.util.ArrayList;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;

public class NauczycielPersDataSource {
	private SQLiteDatabase database;
	
	public NauczycielPersDataSource(SQLiteDatabase database)
	{
		this.database = database;
	}
	
	public boolean addNauczyciel(final Nauczyciel nauczyciel)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		if(database.isReadOnly())
			throw new SQLiteException("Wrong database connection!");
		
		ContentValues values = new ContentValues();
		values.put(PersDatabaseHandler.KEY_NAUCZYCIEL, nauczyciel.getIdNauczyciela());
		values.put(PersDatabaseHandler.KEY_NAME, nauczyciel.getNazwa());
		
		if(database.insert(PersDatabaseHandler.TABLE_NAUCZYCIEL_PERS, null, values) == -1)
			return false;
		
		return true;
	}
	
	public boolean addNauczycielList(final ArrayList<Nauczyciel> nauczyciele)
	{
		if(nauczyciele == null || nauczyciele.size() == 0)
			return true;
		
		for(Nauczyciel nauczyciel: nauczyciele)
			if(!addNauczyciel(nauczyciel))
				return false;
		
		return true;
	}
	
	public ArrayList<Nauczyciel> getNauczecieli()
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		ArrayList<Nauczyciel> nauczyciele = new ArrayList<Nauczyciel>();
		Cursor cursor = null;
			
		cursor = database.query(PersDatabaseHandler.TABLE_NAUCZYCIEL_PERS,
				null, null, null, null, null, null);
	
		cursor.moveToFirst();
		while (!cursor.isAfterLast()) {
			final Nauczyciel nauczyciel = NauczycielDataSource.cursorToNauczyciel(cursor);
			nauczyciele.add(nauczyciel);
			cursor.moveToNext();
		}
		// Make sure to close the cursor
		cursor.close();
		
		return nauczyciele;
	}
	
	public Nauczyciel getNauczyciela(final Integer idNauczyciela)
	{
		if(!database.isOpen())
			throw new SQLiteException("Database not open!");
		
		Cursor cursor = null;
		
		if(idNauczyciela > 0) 
			cursor = database.query(PersDatabaseHandler.TABLE_NAUCZYCIEL_PERS,
					null, "idNauczyciela = " + idNauczyciela.toString(), null, null, null, null);
		
		cursor.moveToFirst();
		final Nauczyciel nauczyciel = NauczycielDataSource.cursorToNauczyciel(cursor);
		// Make sure to close the cursor
		cursor.close();
		
		return nauczyciel;
	}
	
	public ArrayList<Nauczyciel> getNauczyciel(final String nazwa)
	{
		
		if(!database.isOpen()) {
			throw new SQLiteException("Database not open!");
		}
		
		Cursor cursor = null;
		
		if(nazwa != null) 
			cursor = database.query(PersDatabaseHandler.TABLE_NAUCZYCIEL_PERS,
					null, "nazwa LIKE '%" + nazwa + "%'", null, null, null, null);
		
		cursor.moveToFirst();
		
		ArrayList<Nauczyciel> n = new ArrayList<Nauczyciel>();
		
		while (!cursor.isAfterLast()) {
			final Nauczyciel nauczyciel = NauczycielPersDataSource.cursorToNauczyciel(cursor);
			n.add(nauczyciel);
			cursor.moveToNext();
		}
		
		// Make sure to close the cursor
		cursor.close();
		
		return n;
	}
	
	public static Nauczyciel cursorToNauczyciel(Cursor cursor)
	{
		Nauczyciel nauczyciel = new Nauczyciel();
		nauczyciel.setIdNauczyciela(cursor.getInt(0));
		nauczyciel.setNazwa(cursor.getString(1));
		return nauczyciel;
	}
}
